<?php

// 在工厂方法的基础上，在工厂实现类中新增方法，即为抽象工厂模式。

namespace abstract_factory;

require_once '../autoload.php';


$mysql_factory = new MysqlFactory();

$i_user = $mysql_factory->createUser();

$i_department = $mysql_factory->createDepartment();

$i_user->insert();

$i_department->insert();

//----------------------------分割线-----------------------------------

//上方的实现的缺点是，新增产品时，需要修改 IFactory, MysqlFactory, SqlServerFactory三个类，不符合开放封闭原则。
//使用DbAccess类代替工厂相关的三个类，

$access = new DbAccess();

$i_user = $access->createUser();

$i_user->insert();

$i_user->select();

//----------------------------分割线-----------------------------------

//切换数据库服务需要修改DbAccess的属性，将属性值写入配置文件中，控制属性从配置文件读取值，使DbAccess更符合开放封闭原则。